Einleitung Das Unternehmen “213” produziert Ledersitzbezügen (T14), der mehrere Automobilhersteller mit Teilen beliefert. Die Lieferkette besteht aus zwei Instanzen: dem Teilelieferanten und dem Komponentenlieferanten. Die Produktionsfabrik installiert die Komponenten in den jeweiligen Fahrzeugen. Die Analyse bezieht sich einerseits auf die Registrierung von Fahrzeugen, die unsere Sitzbezüge über Postleitzahlen und Fahrzeugtypen installiert haben. Ausgehend von den bereitgestellten Daten, die manuell aus der TUB Cloud heruntergeladen wurden, werden diese im ersten Teil der Aufgabe eingelesen und zur weiteren Verarbeitung abgespeichert. Aufgabenteil 2 enthält die Analyse der Roh-Daten und das Zusammenführen relevanter Datenstränge zu einem finalen Datensatz, der als Ausgangspunkt für die Shiny Applikation dient. Teil 3 enthält die Herstellung von Shinyapp, die einen Balkendiagramm, das die monatliche Registrierung von Fahrzeugen mit unseren Ledersitzbezügen anzeigt. Dazu gehören eine Tabelle und eine Karte, die notwendige Informationen enthält und die die Anzahl der zugelassenen Fahrzeuge mit Sitzbezug in ganz Deutschland zeigt.

1 Datenimport

Zur Nutzung der R-Funktion muss vorher die notwendigen Pakete geladen werden

if(!require(tidyverse)) {
  install.packages("tidyverse")
  require(tidyverse)
}

if(!require(stringr)) {
  install.packages("stringr")
  require(stringr)
}

library(dplyr)
library(magrittr)

1.1 Ordner “Einzelteil”

Um einen ersten Eindruck zu bekommen, was für Daten zur Verfügung stehen, werden diese zuerst für jeden Ordner aufgelistet. Dann werden die benötigte Daten eingelesen und gespeichert. Danach wird der Aubau von gespeicherte Daten beobachtet. Die gleiche Schritte gelten auch für folgende Ordner bzw. “Fahrzeuge“, “Geodaten“, “Komponenten“, und “Zulassungen“.

Der Ordner “Einzelteil” enthält folgende Dateien:

useBytes = TRUE
Einzelteil_ordner <- list.files(path = "Data/Einzelteil")
Einzelteil_ordner
##  [1] "Einzelteil_T01.txt" "Einzelteil_T02.txt" "Einzelteil_T03.txt"
##  [4] "Einzelteil_T04.csv" "Einzelteil_T05.csv" "Einzelteil_T06.csv"
##  [7] "Einzelteil_T07.txt" "Einzelteil_T08.csv" "Einzelteil_T09.txt"
## [10] "Einzelteil_T10.csv" "Einzelteil_T11.txt" "Einzelteil_T12.csv"
## [13] "Einzelteil_T13.csv" "Einzelteil_T14.csv" "Einzelteil_T15.csv"
## [16] "Einzelteil_T16.txt" "Einzelteil_T17.csv" "Einzelteil_T18.csv"
## [19] "Einzelteil_T19.csv" "Einzelteil_T20.txt" "Einzelteil_T21.csv"
## [22] "Einzelteil_T22.txt" "Einzelteil_T23.csv" "Einzelteil_T24.txt"
## [25] "Einzelteil_T25.csv" "Einzelteil_T26.csv" "Einzelteil_T27.txt"
## [28] "Einzelteil_T30.csv" "Einzelteil_T31.txt" "Einzelteil_T32.csv"
## [31] "Einzelteil_T33.csv" "Einzelteil_T34.txt" "Einzelteil_T35.txt"
## [34] "Einzelteil_T36.txt" "Einzelteil_T37.csv" "Einzelteil_T38.csv"
## [37] "Einzelteil_T39.txt" "Einzelteil_T40.csv"

Einlesen von Teil 14. Benötigt wird nur das Einzelteil T14.(in Aufgabestellung erwähnt)

Einzelteil_T14 <- read_csv2("Data/Einzelteil/Einzelteil_T14.csv", col_names = TRUE)
## Using ',' as decimal and '.' as grouping mark. Use read_delim() for more control.
## Parsed with column specification:
## cols(
##   X1 = col_double(),
##   X1_1 = col_double(),
##   ID_T14 = col_character(),
##   Herstellernummer = col_double(),
##   Werksnummer = col_double(),
##   Fehlerhaft = col_double(),
##   Fehlerhaft_Datum = col_date(format = ""),
##   Fehlerhaft_Fahrleistung = col_double(),
##   Produktionsdatum_Origin_01011970 = col_double(),
##   origin = col_character()
## )

Inhalt/Aufbau anschauen.(mit 2 verschiedenen Verfahren)

str(Einzelteil_T14)
## Classes 'spec_tbl_df', 'tbl_df', 'tbl' and 'data.frame': 477052 obs. of  10 variables:
##  $ X1                              : num  1 2 3 4 5 6 7 8 9 10 ...
##  $ X1_1                            : num  1 2 3 4 5 6 7 8 9 10 ...
##  $ ID_T14                          : chr  "14-214-2142-11" "14-213-2132-30" "14-213-2132-6" "14-214-2142-38" ...
##  $ Herstellernummer                : num  214 213 213 214 213 214 213 214 214 213 ...
##  $ Werksnummer                     : num  2142 2132 2132 2142 2131 ...
##  $ Fehlerhaft                      : num  0 0 0 0 0 0 0 0 1 0 ...
##  $ Fehlerhaft_Datum                : Date, format: NA NA ...
##  $ Fehlerhaft_Fahrleistung         : num  0 0 0 0 0 ...
##  $ Produktionsdatum_Origin_01011970: num  14190 14190 14190 14191 14190 ...
##  $ origin                          : chr  "01-01-1970" "01-01-1970" "01-01-1970" "01-01-1970" ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   X1 = col_double(),
##   ..   X1_1 = col_double(),
##   ..   ID_T14 = col_character(),
##   ..   Herstellernummer = col_double(),
##   ..   Werksnummer = col_double(),
##   ..   Fehlerhaft = col_double(),
##   ..   Fehlerhaft_Datum = col_date(format = ""),
##   ..   Fehlerhaft_Fahrleistung = col_double(),
##   ..   Produktionsdatum_Origin_01011970 = col_double(),
##   ..   origin = col_character()
##   .. )

1.2 Ordner “Fahrzeug”

Auflisten, welche Dateien in dem Ordner gespeichert sind.

Fahrzeug_ordner <- list.files(path = "Data/Fahrzeug")
Fahrzeug_ordner
## [1] "Bestandteile_Fahrzeuge_OEM1_Typ11.csv"
## [2] "Bestandteile_Fahrzeuge_OEM1_Typ12.csv"
## [3] "Bestandteile_Fahrzeuge_OEM2_Typ21.csv"
## [4] "Bestandteile_Fahrzeuge_OEM2_Typ22.csv"
## [5] "Fahrzeuge_OEM1_Typ11.csv"             
## [6] "Fahrzeuge_OEM1_Typ12.csv"             
## [7] "Fahrzeuge_OEM2_Typ21.csv"             
## [8] "Fahrzeuge_OEM2_Typ22.csv"

Pfadangabe

Fahrzeug_pfad <- file.path("Data/Fahrzeug",Fahrzeug_ordner)

Fahrzeugbestandteile einlesen und abspeichern in Variablen. Achtung: read_csv2 führt zum inkorrekten Laden des Inhaltes, wegen anderem Trennzeichen. Stattdessen wird read_csv genutzt, was zum korrekten Einlesen führt.

Bestandteile_Fahrzeuge_OEM1_Typ11 <- read_csv2(Fahrzeug_pfad[1], col_names = TRUE)
## Using ',' as decimal and '.' as grouping mark. Use read_delim() for more control.
## Parsed with column specification:
## cols(
##   X1 = col_double(),
##   ID_Karosserie = col_character(),
##   ID_Schaltung = col_character(),
##   ID_Sitze = col_character(),
##   ID_Motor = col_character(),
##   ID_Fahrzeug = col_character()
## )
Bestandteile_Fahrzeuge_OEM1_Typ12 <- read_csv2(Fahrzeug_pfad[2], col_names = TRUE)
## Using ',' as decimal and '.' as grouping mark. Use read_delim() for more control.
## Parsed with column specification:
## cols(
##   X1 = col_double(),
##   ID_Karosserie = col_character(),
##   ID_Schaltung = col_character(),
##   ID_Sitze = col_character(),
##   ID_Motor = col_character(),
##   ID_Fahrzeug = col_character()
## )
Bestandteile_Fahrzeuge_OEM2_Typ21 <- read_csv2(Fahrzeug_pfad[3], col_names = TRUE)
## Using ',' as decimal and '.' as grouping mark. Use read_delim() for more control.
## Parsed with column specification:
## cols(
##   X1 = col_double(),
##   ID_Karosserie = col_character(),
##   ID_Schaltung = col_character(),
##   ID_Sitze = col_character(),
##   ID_Motor = col_character(),
##   ID_Fahrzeug = col_character()
## )
Bestandteile_Fahrzeuge_OEM2_Typ22 <- read_csv2(Fahrzeug_pfad[4], col_names = TRUE)
## Using ',' as decimal and '.' as grouping mark. Use read_delim() for more control.
## Parsed with column specification:
## cols(
##   X1 = col_double(),
##   ID_Karosserie = col_character(),
##   ID_Schaltung = col_character(),
##   ID_Sitze = col_character(),
##   ID_Motor = col_character(),
##   ID_Fahrzeug = col_character()
## )
Fahrzeuge_OEM1_Typ11 <- read_csv(Fahrzeug_pfad[5], col_names = TRUE)
## Parsed with column specification:
## cols(
##   X1 = col_double(),
##   X1_1 = col_double(),
##   ID_Fahrzeug = col_character(),
##   Produktionsdatum = col_date(format = ""),
##   Herstellernummer = col_double(),
##   Werksnummer = col_double(),
##   Fehlerhaft = col_double(),
##   Fehlerhaft_Datum = col_date(format = ""),
##   Fehlerhaft_Fahrleistung = col_double()
## )
Fahrzeuge_OEM1_Typ12 <- read_csv2(Fahrzeug_pfad[6], col_names = TRUE)
## Using ',' as decimal and '.' as grouping mark. Use read_delim() for more control.
## Parsed with column specification:
## cols(
##   X1 = col_double(),
##   X1_1 = col_double(),
##   ID_Fahrzeug = col_character(),
##   Produktionsdatum = col_date(format = ""),
##   Herstellernummer = col_double(),
##   Werksnummer = col_double(),
##   Fehlerhaft = col_double(),
##   Fehlerhaft_Datum = col_date(format = ""),
##   Fehlerhaft_Fahrleistung = col_double()
## )
Fahrzeuge_OEM2_Typ21 <- read_csv(Fahrzeug_pfad[7], col_names = TRUE)
## Parsed with column specification:
## cols(
##   X1 = col_double(),
##   X1_1 = col_double(),
##   ID_Fahrzeug = col_character(),
##   Herstellernummer = col_double(),
##   Werksnummer = col_double(),
##   Fehlerhaft = col_double(),
##   Fehlerhaft_Datum = col_date(format = ""),
##   Fehlerhaft_Fahrleistung = col_double(),
##   Produktionsdatum_Origin_01011970 = col_double(),
##   origin = col_character()
## )
Fahrzeuge_OEM2_Typ22 <- read_csv2(Fahrzeug_pfad[8], col_names = TRUE)
## Using ',' as decimal and '.' as grouping mark. Use read_delim() for more control.
## Parsed with column specification:
## cols(
##   X1 = col_double(),
##   X1_1 = col_double(),
##   ID_Fahrzeug = col_character(),
##   Herstellernummer = col_double(),
##   Werksnummer = col_double(),
##   Fehlerhaft = col_double(),
##   Fehlerhaft_Datum = col_date(format = ""),
##   Fehlerhaft_Fahrleistung = col_double(),
##   Produktionsdatum_Origin_01011970 = col_double(),
##   origin = col_character()
## )

Inhalt/Aufbau anschauen.

str(Bestandteile_Fahrzeuge_OEM1_Typ11)
## Classes 'spec_tbl_df', 'tbl_df', 'tbl' and 'data.frame': 1977164 obs. of  6 variables:
##  $ X1           : num  1 2 3 4 5 6 7 8 9 10 ...
##  $ ID_Karosserie: chr  "K4-112-1121-3" "K4-112-1121-4" "K4-112-1121-7" "K4-112-1121-9" ...
##  $ ID_Schaltung : chr  "K3SG1-105-1051-32" "K3SG1-105-1051-141" "K3SG1-105-1051-106" "K3SG1-105-1051-21" ...
##  $ ID_Sitze     : chr  "K2LE1-109-1091-2" "K2ST1-109-1092-5" "K2ST1-109-1092-57" "K2ST1-109-1092-91" ...
##  $ ID_Motor     : chr  "K1BE1-101-1011-7" "K1BE1-101-1011-12" "K1BE1-101-1011-38" "K1BE1-101-1011-97" ...
##  $ ID_Fahrzeug  : chr  "11-1-11-1" "11-1-11-2" "11-1-11-3" "11-1-11-4" ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   X1 = col_double(),
##   ..   ID_Karosserie = col_character(),
##   ..   ID_Schaltung = col_character(),
##   ..   ID_Sitze = col_character(),
##   ..   ID_Motor = col_character(),
##   ..   ID_Fahrzeug = col_character()
##   .. )
str(Bestandteile_Fahrzeuge_OEM1_Typ12)
## Classes 'spec_tbl_df', 'tbl_df', 'tbl' and 'data.frame': 408096 obs. of  6 variables:
##  $ X1           : num  1 2 3 4 5 6 7 8 9 10 ...
##  $ ID_Karosserie: chr  "K5-112-1122-1" "K5-112-1122-11" "K5-112-1122-2" "K5-112-1122-3" ...
##  $ ID_Schaltung : chr  "K3SG1-105-1051-4" "K3AG1-105-1051-9" "K3AG1-105-1051-23" "K3AG1-106-1061-66" ...
##  $ ID_Sitze     : chr  "K2ST1-109-1092-1" "K2ST1-109-1092-16" "K2ST1-109-1092-21" "K2ST1-109-1092-70" ...
##  $ ID_Motor     : chr  "K1BE1-101-1011-90" "K1BE1-101-1011-2" "K1BE1-101-1011-8" "K1BE1-101-1011-11" ...
##  $ ID_Fahrzeug  : chr  "12-1-12-1" "12-1-12-2" "12-1-12-3" "12-1-12-4" ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   X1 = col_double(),
##   ..   ID_Karosserie = col_character(),
##   ..   ID_Schaltung = col_character(),
##   ..   ID_Sitze = col_character(),
##   ..   ID_Motor = col_character(),
##   ..   ID_Fahrzeug = col_character()
##   .. )
str(Bestandteile_Fahrzeuge_OEM2_Typ21)
## Classes 'spec_tbl_df', 'tbl_df', 'tbl' and 'data.frame': 512354 obs. of  6 variables:
##  $ X1           : num  1 2 3 4 5 6 7 8 9 10 ...
##  $ ID_Karosserie: chr  "K6-113-1132-1" "K6-113-1132-2" "K6-113-1132-8" "K6-113-1132-9" ...
##  $ ID_Schaltung : chr  "K3AG2-108-1082-10" "K3AG2-108-1082-6" "K3AG2-105-1051-13" "K3AG2-108-1082-16" ...
##  $ ID_Sitze     : chr  "K2ST2-109-1092-44" "K2ST2-109-1092-42" "K2ST2-109-1092-74" "K2ST2-109-1092-31" ...
##  $ ID_Motor     : chr  "K1BE2-101-1011-1" "K1DI2-103-1031-1" "K1BE2-101-1011-4" "K1BE2-101-1011-5" ...
##  $ ID_Fahrzeug  : chr  "21-2-21-1" "21-2-21-2" "21-2-21-4" "21-2-21-5" ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   X1 = col_double(),
##   ..   ID_Karosserie = col_character(),
##   ..   ID_Schaltung = col_character(),
##   ..   ID_Sitze = col_character(),
##   ..   ID_Motor = col_character(),
##   ..   ID_Fahrzeug = col_character()
##   .. )
str(Bestandteile_Fahrzeuge_OEM2_Typ22)
## Classes 'spec_tbl_df', 'tbl_df', 'tbl' and 'data.frame': 306490 obs. of  6 variables:
##  $ X1           : num  1 2 3 4 5 6 7 8 9 10 ...
##  $ ID_Karosserie: chr  "K7-114-1142-1" "K7-114-1142-2" "K7-114-1142-5" "K7-114-1142-8" ...
##  $ ID_Schaltung : chr  "K3AG2-108-1082-9" "K3AG2-108-1082-11" "K3AG2-108-1082-14" "K3AG2-108-1082-3" ...
##  $ ID_Sitze     : chr  "K2ST2-109-1092-2" "K2ST2-109-1092-59" "K2ST2-109-1092-4" "K2ST2-109-1092-6" ...
##  $ ID_Motor     : chr  "K1DI2-103-1031-2" "K1BE2-101-1011-2" "K1BE2-101-1011-3" "K1BE2-101-1011-10" ...
##  $ ID_Fahrzeug  : chr  "22-2-21-1" "22-2-21-2" "22-2-21-3" "22-2-21-4" ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   X1 = col_double(),
##   ..   ID_Karosserie = col_character(),
##   ..   ID_Schaltung = col_character(),
##   ..   ID_Sitze = col_character(),
##   ..   ID_Motor = col_character(),
##   ..   ID_Fahrzeug = col_character()
##   .. )
str(Fahrzeuge_OEM1_Typ11)
## Classes 'spec_tbl_df', 'tbl_df', 'tbl' and 'data.frame': 1977164 obs. of  9 variables:
##  $ X1                     : num  1 2 3 4 5 6 7 8 9 10 ...
##  $ X1_1                   : num  1 2 3 4 5 6 7 8 9 10 ...
##  $ ID_Fahrzeug            : chr  "11-1-11-1" "11-1-11-2" "11-1-11-3" "11-1-11-4" ...
##  $ Produktionsdatum       : Date, format: "2008-11-18" "2008-11-18" ...
##  $ Herstellernummer       : num  1 1 1 1 1 1 1 1 1 1 ...
##  $ Werksnummer            : num  11 11 11 11 11 11 11 11 11 11 ...
##  $ Fehlerhaft             : num  0 0 0 0 0 0 0 0 1 0 ...
##  $ Fehlerhaft_Datum       : Date, format: NA NA ...
##  $ Fehlerhaft_Fahrleistung: num  0 0 0 0 0 ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   X1 = col_double(),
##   ..   X1_1 = col_double(),
##   ..   ID_Fahrzeug = col_character(),
##   ..   Produktionsdatum = col_date(format = ""),
##   ..   Herstellernummer = col_double(),
##   ..   Werksnummer = col_double(),
##   ..   Fehlerhaft = col_double(),
##   ..   Fehlerhaft_Datum = col_date(format = ""),
##   ..   Fehlerhaft_Fahrleistung = col_double()
##   .. )
str(Fahrzeuge_OEM1_Typ12)
## Classes 'spec_tbl_df', 'tbl_df', 'tbl' and 'data.frame': 408096 obs. of  9 variables:
##  $ X1                     : num  1 2 3 4 5 6 7 8 9 10 ...
##  $ X1_1                   : num  1 2 3 4 5 6 7 8 9 10 ...
##  $ ID_Fahrzeug            : chr  "12-1-12-1" "12-1-12-2" "12-1-12-3" "12-1-12-4" ...
##  $ Produktionsdatum       : Date, format: "2008-11-19" "2008-11-19" ...
##  $ Herstellernummer       : num  1 1 1 1 1 1 1 1 1 1 ...
##  $ Werksnummer            : num  12 12 12 12 12 12 12 12 12 12 ...
##  $ Fehlerhaft             : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ Fehlerhaft_Datum       : Date, format: NA NA ...
##  $ Fehlerhaft_Fahrleistung: num  0 0 0 0 0 0 0 0 0 0 ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   X1 = col_double(),
##   ..   X1_1 = col_double(),
##   ..   ID_Fahrzeug = col_character(),
##   ..   Produktionsdatum = col_date(format = ""),
##   ..   Herstellernummer = col_double(),
##   ..   Werksnummer = col_double(),
##   ..   Fehlerhaft = col_double(),
##   ..   Fehlerhaft_Datum = col_date(format = ""),
##   ..   Fehlerhaft_Fahrleistung = col_double()
##   .. )
str(Fahrzeuge_OEM2_Typ21)
## Classes 'spec_tbl_df', 'tbl_df', 'tbl' and 'data.frame': 512354 obs. of  10 variables:
##  $ X1                              : num  1 2 3 4 5 6 7 8 9 10 ...
##  $ X1_1                            : num  1 2 3 4 5 6 7 8 9 10 ...
##  $ ID_Fahrzeug                     : chr  "21-2-21-1" "21-2-21-2" "21-2-21-3" "21-2-21-4" ...
##  $ Herstellernummer                : num  2 2 2 2 2 2 2 2 2 2 ...
##  $ Werksnummer                     : num  21 21 21 21 21 21 21 21 21 21 ...
##  $ Fehlerhaft                      : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ Fehlerhaft_Datum                : Date, format: NA NA ...
##  $ Fehlerhaft_Fahrleistung         : num  0 0 0 0 0 0 0 0 0 0 ...
##  $ Produktionsdatum_Origin_01011970: num  14202 14202 15353 14203 14203 ...
##  $ origin                          : chr  "01-01-1970" "01-01-1970" "01-01-1970" "01-01-1970" ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   X1 = col_double(),
##   ..   X1_1 = col_double(),
##   ..   ID_Fahrzeug = col_character(),
##   ..   Herstellernummer = col_double(),
##   ..   Werksnummer = col_double(),
##   ..   Fehlerhaft = col_double(),
##   ..   Fehlerhaft_Datum = col_date(format = ""),
##   ..   Fehlerhaft_Fahrleistung = col_double(),
##   ..   Produktionsdatum_Origin_01011970 = col_double(),
##   ..   origin = col_character()
##   .. )
str(Fahrzeuge_OEM2_Typ22)
## Classes 'spec_tbl_df', 'tbl_df', 'tbl' and 'data.frame': 306490 obs. of  10 variables:
##  $ X1                              : num  1 2 3 4 5 6 7 8 9 10 ...
##  $ X1_1                            : num  1 2 3 4 5 6 7 8 9 10 ...
##  $ ID_Fahrzeug                     : chr  "22-2-21-1" "22-2-21-2" "22-2-21-3" "22-2-21-4" ...
##  $ Herstellernummer                : num  2 2 2 2 2 2 2 2 2 2 ...
##  $ Werksnummer                     : num  21 21 21 21 21 21 21 21 21 21 ...
##  $ Fehlerhaft                      : num  1 1 0 0 0 0 0 0 0 0 ...
##  $ Fehlerhaft_Datum                : Date, format: "2010-03-18" "2010-03-18" ...
##  $ Fehlerhaft_Fahrleistung         : num  18841 18841 0 0 0 ...
##  $ Produktionsdatum_Origin_01011970: num  14202 14202 14202 14203 14203 ...
##  $ origin                          : chr  "01-01-1970" "01-01-1970" "01-01-1970" "01-01-1970" ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   X1 = col_double(),
##   ..   X1_1 = col_double(),
##   ..   ID_Fahrzeug = col_character(),
##   ..   Herstellernummer = col_double(),
##   ..   Werksnummer = col_double(),
##   ..   Fehlerhaft = col_double(),
##   ..   Fehlerhaft_Datum = col_date(format = ""),
##   ..   Fehlerhaft_Fahrleistung = col_double(),
##   ..   Produktionsdatum_Origin_01011970 = col_double(),
##   ..   origin = col_character()
##   .. )

1.3 Ordner “Geodaten”

Auflisten, welche Dateien in dem Ordner gespeichert sind.

Geodaten_ordner <- list.files(path = "Data/Geodaten")
Geodaten_ordner
## [1] "Geodaten_Gemeinden_v1.2_2017-08-22_TrR.csv"
## [2] "Klimazonen_K?ppen_Geiger.xlsx"             
## [3] "OEM_Werke_2017-07-04_TrR.csv"              
## [4] "Tier1_Werke_2017-07-11_v1.2_TrR.csv"       
## [5] "Tier2_Werke_2017-07-11_v1.2_TrR.csv"

Pfadangabe:

Geodaten_pfad <- file.path("Data/Geodaten",Geodaten_ordner)

Benötigt werden Daten zu den Gemeinden aus Datei 1.

Geodaten_Gemeinden <- read_csv2(Geodaten_pfad[1], col_names = TRUE)
## Using ',' as decimal and '.' as grouping mark. Use read_delim() for more control.
## Parsed with column specification:
## cols(
##   X1 = col_double(),
##   X = col_double(),
##   Postleitzahl = col_double(),
##   Gemeinde = col_character(),
##   Laengengrad = col_double(),
##   Breitengrad = col_double()
## )

Inhalt/Aufbau anschauen.

str(Geodaten_Gemeinden)
## Classes 'spec_tbl_df', 'tbl_df', 'tbl' and 'data.frame': 7775 obs. of  6 variables:
##  $ X1          : num  1 2 3 4 5 6 7 8 9 10 ...
##  $ X           : num  1 2 3 4 5 6 7 8 9 10 ...
##  $ Postleitzahl: num  1067 1445 1454 1454 1458 ...
##  $ Gemeinde    : chr  "DRESDEN" "RADEBEUL" "RADEBERG" "WACHAU" ...
##  $ Laengengrad : num  13.7 13.7 13.9 13.9 13.8 ...
##  $ Breitengrad : num  51.1 51.1 51.1 51.2 51.2 ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   X1 = col_double(),
##   ..   X = col_double(),
##   ..   Postleitzahl = col_double(),
##   ..   Gemeinde = col_character(),
##   ..   Laengengrad = col_double(),
##   ..   Breitengrad = col_double()
##   .. )

1.4 Ordner “Komponenten”

Auflisten, welche Dateien in dem Ordner gespeichert sind.

Komponente_ordner <- list.files(path = "Data/Komponente")
Komponente_ordner
##  [1] "Bestandteile_Komponente_K1BE1.csv"
##  [2] "Bestandteile_Komponente_K1BE2.csv"
##  [3] "Bestandteile_Komponente_K1DI1.csv"
##  [4] "Bestandteile_Komponente_K1DI2.csv"
##  [5] "Bestandteile_Komponente_K2LE1.csv"
##  [6] "Bestandteile_Komponente_K2LE2.csv"
##  [7] "Bestandteile_Komponente_K2ST1.csv"
##  [8] "Bestandteile_Komponente_K2ST2.csv"
##  [9] "Bestandteile_Komponente_K3AG1.csv"
## [10] "Bestandteile_Komponente_K3AG2.csv"
## [11] "Bestandteile_Komponente_K3SG1.csv"
## [12] "Bestandteile_Komponente_K3SG2.csv"
## [13] "Bestandteile_Komponente_K4.csv"   
## [14] "Bestandteile_Komponente_K5.csv"   
## [15] "Bestandteile_Komponente_K6.csv"   
## [16] "Bestandteile_Komponente_K7.csv"   
## [17] "Komponente_K1BE1.csv"             
## [18] "Komponente_K1BE2.csv"             
## [19] "Komponente_K1DI1.csv"             
## [20] "Komponente_K1DI2.txt"             
## [21] "Komponente_K2LE1.txt"             
## [22] "Komponente_K2LE2.txt"             
## [23] "Komponente_K2ST1.txt"             
## [24] "Komponente_K2ST2.csv"             
## [25] "Komponente_K3AG1.csv"             
## [26] "Komponente_K3AG2.txt"             
## [27] "Komponente_K3SG1.csv"             
## [28] "Komponente_K3SG2.csv"             
## [29] "Komponente_K4.csv"                
## [30] "Komponente_K5.csv"                
## [31] "Komponente_K6.csv"                
## [32] "Komponente_K7.txt"

Pfadangabe

Komponente_pfad <- file.path("Data/Komponente",Komponente_ordner)

Nach Beobachten von Spaltenamen, nur K2LE1 enthält T14, deshalb wird nur K2LE1 benötigt.

Bestandteile_Komponente_K2LE1 <- read_csv2(Komponente_pfad[5], col_names = TRUE)
## Using ',' as decimal and '.' as grouping mark. Use read_delim() for more control.
## Parsed with column specification:
## cols(
##   X1 = col_double(),
##   ID_T11 = col_character(),
##   ID_T14 = col_character(),
##   ID_T15 = col_character(),
##   ID_K2LE1 = col_character()
## )

Inhalt/Aufbau anschauen.

summary(Bestandteile_Komponente_K2LE1)
##        X1            ID_T11             ID_T14             ID_T15         
##  Min.   :     1   Length:477052      Length:477052      Length:477052     
##  1st Qu.:119264   Class :character   Class :character   Class :character  
##  Median :238527   Mode  :character   Mode  :character   Mode  :character  
##  Mean   :238527                                                           
##  3rd Qu.:357789                                                           
##  Max.   :477052                                                           
##    ID_K2LE1        
##  Length:477052     
##  Class :character  
##  Mode  :character  
##                    
##                    
## 

1.5 Ordner “Zulassungen”

Auflisten, welche Dateien in dem Ordner gespeichert sind.

Zulassungen_ordner <- list.files(path = "Data/Zulassungen")
Zulassungen_ordner
## [1] "Zulassungen_alle_Fahrzeuge.csv"

Pfadangabe

Zulassungen_pfad <- file.path("Data/Zulassungen",Zulassungen_ordner)

Eine Datei, die die Zulassungsdaten aller Fahrzeuge enthält.

Zulassungen_alle_Fahrzeug <- read_csv2(Zulassungen_pfad, col_names = TRUE)
## Using ',' as decimal and '.' as grouping mark. Use read_delim() for more control.
## Parsed with column specification:
## cols(
##   X1 = col_double(),
##   IDNummer = col_character(),
##   Gemeinden = col_character(),
##   Zulassung = col_date(format = "")
## )

Inhalt/Aufbau anschauen.

str(Zulassungen_alle_Fahrzeug)
## Classes 'spec_tbl_df', 'tbl_df', 'tbl' and 'data.frame': 3204104 obs. of  4 variables:
##  $ X1       : num  408097 408098 1 2 3 ...
##  $ IDNummer : chr  "11-1-11-1" "11-1-11-2" "12-1-12-1" "12-1-12-2" ...
##  $ Gemeinden: chr  "DRESDEN" "DRESDEN" "LEIPZIG" "LEIPZIG" ...
##  $ Zulassung: Date, format: "2009-01-01" "2009-01-01" ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   X1 = col_double(),
##   ..   IDNummer = col_character(),
##   ..   Gemeinden = col_character(),
##   ..   Zulassung = col_date(format = "")
##   .. )

2 Bearbeiten der Daten

Nach Einlesen und Beobachten von alle Daten werden dann die Korrelationen zwischen den einzelnen Daten herausgefunden bzw. gemeinsame Spaltnamen und dann in einen Datensatz zusammengefügt und gespeichert. Dieser Datensatz dient zur Herstellung von Shinyapp.

2.1 Einzelteil T14

Nach Bedarf von Aufgabestellung werden die entsprechende Spalten: “ Herstellernummer_T14“, “ Werksnummer_T14“, “ Fehlerhaft_T14“ ausgewählt. Da das Unternehmen 213 ist, wird die Spalte “Herstellernummer_T14“ mit entsprechende Nummer “213“ gefiltert.

 T14_info <- Einzelteil_T14 %>%
  select(ID_T14, 
         Herstellernummer_T14 = Herstellernummer, 
         Werksnummer_T14 = Werksnummer, 
         Fehlerhaft_T14 = Fehlerhaft
  ) %>%
  filter(
    Herstellernummer_T14 == 213
  )

Gibt es NA-Einträge?

any(is.na(T14_info)) # nein
## [1] FALSE

Inhalt/Aufbau anschauen.

summary(T14_info)
##     ID_T14          Herstellernummer_T14 Werksnummer_T14 Fehlerhaft_T14   
##  Length:190820      Min.   :213          Min.   :2131    Min.   :0.00000  
##  Class :character   1st Qu.:213          1st Qu.:2131    1st Qu.:0.00000  
##  Mode  :character   Median :213          Median :2132    Median :0.00000  
##                     Mean   :213          Mean   :2132    Mean   :0.09997  
##                     3rd Qu.:213          3rd Qu.:2132    3rd Qu.:0.00000  
##                     Max.   :213          Max.   :2132    Max.   :1.00000

Löschen der nicht mehr genutzten Variablen/Datensätze, um Speicherkapazität hoch zu halten.

rm(Einzelteil_T14)

Datensatz “T14_info” enthält Daten zu allen Sitzbezugen T14, die vom Werk/Unternehmen “213” produziert wurden. Über die Komponentendaten können die Einzelteile den Sitzbezugen zugeordnet werden. Über die Sitzes-ID’s diese wiederum zu den Fahrzeugen und damit den Zulassungen und Geodaten.

In welchen Komponenten sind die Einzelteile verbaut?

2.2 Komponenten

Gibt es NA-Einträge?

any(is.na(Bestandteile_Komponente_K2LE1)) # nein
## [1] FALSE

Zusammenfassung des Datensatzes:

summary(Bestandteile_Komponente_K2LE1)
##        X1            ID_T11             ID_T14             ID_T15         
##  Min.   :     1   Length:477052      Length:477052      Length:477052     
##  1st Qu.:119264   Class :character   Class :character   Class :character  
##  Median :238527   Mode  :character   Mode  :character   Mode  :character  
##  Mean   :238527                                                           
##  3rd Qu.:357789                                                           
##  Max.   :477052                                                           
##    ID_K2LE1        
##  Length:477052     
##  Class :character  
##  Mode  :character  
##                    
##                    
## 

Untersuchung der NA-Einträge:

index_ID_T14 <- which(is.na(Bestandteile_Komponente_K2LE1$ID_T14))
index_ID_K2LE1 <- which(is.na(Bestandteile_Komponente_K2LE1$ID_K2LE1))

identical(index_ID_T14, index_ID_K2LE1)
## [1] TRUE

Nur ID_T14 und ID_K2LE1 werden benötigt.

K2LE1_info <- Bestandteile_Komponente_K2LE1 %>%
  select(
    ID_T14,
    ID_Sitze = ID_K2LE1
  ) 

Gibt es NA-Einträge?

any(is.na(K2LE1_info)) # nein
## [1] FALSE

Inhalt/Aufbau anschauen.

summary(K2LE1_info)
##     ID_T14            ID_Sitze        
##  Length:477052      Length:477052     
##  Class :character   Class :character  
##  Mode  :character   Mode  :character

Löschen der nicht mehr genutzten Variablen/Datensätze, um Speicherkapazität hoch zu halten.

rm(Bestandteile_Komponente_K2LE1)

Dann kommt eine Frage: In welchen Fahrzeugen sind diese Sitzbezugen verbaut?

2.3 Fahrzeug

Zusammenfassung des Datensatzes von Typ 11,12,21 und 22 durch ID_Fahrzeug_Typ11 Typ11:

OEM1_Typ11 <- Fahrzeuge_OEM1_Typ11 %>% 
  select(
    ID_Fahrzeug,
    Herstellernummer_Fahrzeug = Herstellernummer,
    Werksnummer_Fahrzeug = Werksnummer,
    Fehlerhaft_Fahrzeug = Fehlerhaft
  ) %>% 
  left_join(
    select(Bestandteile_Fahrzeuge_OEM1_Typ11,
           ID_Sitze,
           ID_Fahrzeug
    ),
    by = "ID_Fahrzeug"
  )
any(is.na(OEM1_Typ11)) # nein
summary(OEM1_Typ11)
## [1] FALSE
##  ID_Fahrzeug        Herstellernummer_Fahrzeug Werksnummer_Fahrzeug
##  Length:1977164     Min.   :1                 Min.   :11.0        
##  Class :character   1st Qu.:1                 1st Qu.:11.0        
##  Mode  :character   Median :1                 Median :11.0        
##                     Mean   :1                 Mean   :11.4        
##                     3rd Qu.:1                 3rd Qu.:12.0        
##                     Max.   :1                 Max.   :12.0        
##  Fehlerhaft_Fahrzeug   ID_Sitze        
##  Min.   :0.0000      Length:1977164    
##  1st Qu.:0.0000      Class :character  
##  Median :0.0000      Mode  :character  
##  Mean   :0.1002                        
##  3rd Qu.:0.0000                        
##  Max.   :1.0000

Typ12:

OEM1_Typ12 <- Fahrzeuge_OEM1_Typ12 %>% 
  select(
    ID_Fahrzeug,
    Herstellernummer_Fahrzeug = Herstellernummer,
    Werksnummer_Fahrzeug = Werksnummer,
    Fehlerhaft_Fahrzeug = Fehlerhaft
  ) %>% 
  left_join(
    select(Bestandteile_Fahrzeuge_OEM1_Typ12,
           ID_Sitze,
           ID_Fahrzeug
    ),
    by = "ID_Fahrzeug"
  )
any(is.na(OEM1_Typ12)) # nein
summary(OEM1_Typ12)
## [1] FALSE
##  ID_Fahrzeug        Herstellernummer_Fahrzeug Werksnummer_Fahrzeug
##  Length:408096      Min.   :1                 Min.   :12          
##  Class :character   1st Qu.:1                 1st Qu.:12          
##  Mode  :character   Median :1                 Median :12          
##                     Mean   :1                 Mean   :12          
##                     3rd Qu.:1                 3rd Qu.:12          
##                     Max.   :1                 Max.   :12          
##  Fehlerhaft_Fahrzeug   ID_Sitze        
##  Min.   :0.0000      Length:408096     
##  1st Qu.:0.0000      Class :character  
##  Median :0.0000      Mode  :character  
##  Mean   :0.1004                        
##  3rd Qu.:0.0000                        
##  Max.   :1.0000

Typ21:

OEM2_Typ21 <- Fahrzeuge_OEM2_Typ21 %>% 
  select(
    ID_Fahrzeug,
    Herstellernummer_Fahrzeug = Herstellernummer,
    Werksnummer_Fahrzeug = Werksnummer,
    Fehlerhaft_Fahrzeug = Fehlerhaft
  ) %>% 
  left_join(
    select(Bestandteile_Fahrzeuge_OEM2_Typ21,
           ID_Sitze,
           ID_Fahrzeug
    ),
    by = "ID_Fahrzeug"
  )
any(is.na(OEM2_Typ21)) # nein
summary(OEM2_Typ21)
## [1] FALSE
##  ID_Fahrzeug        Herstellernummer_Fahrzeug Werksnummer_Fahrzeug
##  Length:512354      Min.   :2                 Min.   :21          
##  Class :character   1st Qu.:2                 1st Qu.:21          
##  Mode  :character   Median :2                 Median :21          
##                     Mean   :2                 Mean   :21          
##                     3rd Qu.:2                 3rd Qu.:21          
##                     Max.   :2                 Max.   :21          
##  Fehlerhaft_Fahrzeug   ID_Sitze        
##  Min.   :0.00000     Length:512354     
##  1st Qu.:0.00000     Class :character  
##  Median :0.00000     Mode  :character  
##  Mean   :0.09914                       
##  3rd Qu.:0.00000                       
##  Max.   :1.00000

Typ22:

OEM2_Typ22 <- Fahrzeuge_OEM2_Typ22 %>% 
  select(
    ID_Fahrzeug,
    Herstellernummer_Fahrzeug = Herstellernummer,
    Werksnummer_Fahrzeug = Werksnummer,
    Fehlerhaft_Fahrzeug = Fehlerhaft
  ) %>% 
  left_join(
    select(Bestandteile_Fahrzeuge_OEM2_Typ22,
           ID_Sitze,
           ID_Fahrzeug
    ),
    by = "ID_Fahrzeug"
  )
any(is.na(OEM2_Typ22)) # nein
summary(OEM2_Typ22)
## [1] FALSE
##  ID_Fahrzeug        Herstellernummer_Fahrzeug Werksnummer_Fahrzeug
##  Length:306490      Min.   :2                 Min.   :21.0        
##  Class :character   1st Qu.:2                 1st Qu.:22.0        
##  Mode  :character   Median :2                 Median :22.0        
##                     Mean   :2                 Mean   :21.8        
##                     3rd Qu.:2                 3rd Qu.:22.0        
##                     Max.   :2                 Max.   :22.0        
##  Fehlerhaft_Fahrzeug   ID_Sitze        
##  Min.   :0.00000     Length:306490     
##  1st Qu.:0.00000     Class :character  
##  Median :0.00000     Mode  :character  
##  Mean   :0.09872                       
##  3rd Qu.:0.00000                       
##  Max.   :1.00000

Löschen der nicht mehr genutzten Variablen/Datensätze, um Speicherkapazität hoch zu halten.

rm(Bestandteile_Fahrzeuge_OEM1_Typ12)
rm(Fahrzeuge_OEM1_Typ12)
rm(Bestandteile_Fahrzeuge_OEM2_Typ22)
rm(Fahrzeuge_OEM2_Typ22)
rm(Bestandteile_Fahrzeuge_OEM1_Typ11)
rm(Fahrzeuge_OEM1_Typ11)
rm(Bestandteile_Fahrzeuge_OEM2_Typ21)
rm(Fahrzeuge_OEM2_Typ21)

Zusammenfügen in einen Datensatz.

OEM_Alle <- bind_rows(OEM1_Typ11, OEM1_Typ12, OEM2_Typ21, OEM2_Typ22)

Löschen der nicht mehr genutzten Variablen/Datensätze, um Speicherkapazität hoch zu halten.

rm(OEM1_Typ11)
rm(OEM1_Typ12)
rm(OEM2_Typ21)
rm(OEM2_Typ22)

2.4 Zulassung

Informationen zu bisherigen Daten hinzufügen Hinzufügen der Informationen von Komponenten an den Einzelteil-Datensatz.

T14_plus_K2LE1 <- T14_info %>%
  left_join(
    K2LE1_info,
    by = "ID_T14"
  )

Gibt es NA-Einträge?

any(is.na(T14_plus_K2LE1))
## [1] FALSE

Inhalt/Aufbau anschauen.

summary(T14_plus_K2LE1)
##     ID_T14          Herstellernummer_T14 Werksnummer_T14 Fehlerhaft_T14   
##  Length:190820      Min.   :213          Min.   :2131    Min.   :0.00000  
##  Class :character   1st Qu.:213          1st Qu.:2131    1st Qu.:0.00000  
##  Mode  :character   Median :213          Median :2132    Median :0.00000  
##                     Mean   :213          Mean   :2132    Mean   :0.09997  
##                     3rd Qu.:213          3rd Qu.:2132    3rd Qu.:0.00000  
##                     Max.   :213          Max.   :2132    Max.   :1.00000  
##    ID_Sitze        
##  Length:190820     
##  Class :character  
##  Mode  :character  
##                    
##                    
## 

Löschen der nicht mehr genutzten Variablen/Datensätze, um Speicherkapazität hoch zu halten.

rm(T14_info)
rm(K2LE1_info)

Welche Fahrzeuge hat Sitzbezug T14 gebaut?

T14_K2LE1_Fahrzeug_Alle <- OEM_Alle %>%
  left_join(
    T14_plus_K2LE1,
    by = "ID_Sitze"
  )

Gibt es NA-Einträge?

any(is.na(T14_K2LE1_Fahrzeug_Alle)) 
## [1] TRUE

Inhalt/Aufbau anschauen.

summary(T14_K2LE1_Fahrzeug_Alle)
##  ID_Fahrzeug        Herstellernummer_Fahrzeug Werksnummer_Fahrzeug
##  Length:3204104     Min.   :1.000             Min.   :11.00       
##  Class :character   1st Qu.:1.000             1st Qu.:11.00       
##  Mode  :character   Median :1.000             Median :12.00       
##                     Mean   :1.256             Mean   :14.01       
##                     3rd Qu.:2.000             3rd Qu.:21.00       
##                     Max.   :2.000             Max.   :22.00       
##                                                                   
##  Fehlerhaft_Fahrzeug   ID_Sitze            ID_T14         
##  Min.   :0.0000      Length:3204104     Length:3204104    
##  1st Qu.:0.0000      Class :character   Class :character  
##  Median :0.0000      Mode  :character   Mode  :character  
##  Mean   :0.0999                                           
##  3rd Qu.:0.0000                                           
##  Max.   :1.0000                                           
##                                                           
##  Herstellernummer_T14 Werksnummer_T14   Fehlerhaft_T14   
##  Min.   :213          Min.   :2131      Min.   :0.0      
##  1st Qu.:213          1st Qu.:2131      1st Qu.:0.0      
##  Median :213          Median :2132      Median :0.0      
##  Mean   :213          Mean   :2132      Mean   :0.1      
##  3rd Qu.:213          3rd Qu.:2132      3rd Qu.:0.0      
##  Max.   :213          Max.   :2132      Max.   :1.0      
##  NA's   :3013284      NA's   :3013284   NA's   :3013284

NA’s entfernen:

T14_K2LE1_Fahrzeug <- na.omit(T14_K2LE1_Fahrzeug_Alle)

Gibt es NA-Einträge?

any(is.na(T14_K2LE1_Fahrzeug)) 
## [1] FALSE

Inhalt/Aufbau anschauen.

summary(T14_K2LE1_Fahrzeug)
##  ID_Fahrzeug        Herstellernummer_Fahrzeug Werksnummer_Fahrzeug
##  Length:190820      Min.   :1                 Min.   :11.0        
##  Class :character   1st Qu.:1                 1st Qu.:11.0        
##  Mode  :character   Median :1                 Median :12.0        
##                     Mean   :1                 Mean   :11.5        
##                     3rd Qu.:1                 3rd Qu.:12.0        
##                     Max.   :1                 Max.   :12.0        
##  Fehlerhaft_Fahrzeug   ID_Sitze            ID_T14         
##  Min.   :0.0000      Length:190820      Length:190820     
##  1st Qu.:0.0000      Class :character   Class :character  
##  Median :0.0000      Mode  :character   Mode  :character  
##  Mean   :0.1004                                           
##  3rd Qu.:0.0000                                           
##  Max.   :1.0000                                           
##  Herstellernummer_T14 Werksnummer_T14 Fehlerhaft_T14   
##  Min.   :213          Min.   :2131    Min.   :0.00000  
##  1st Qu.:213          1st Qu.:2131    1st Qu.:0.00000  
##  Median :213          Median :2132    Median :0.00000  
##  Mean   :213          Mean   :2132    Mean   :0.09997  
##  3rd Qu.:213          3rd Qu.:2132    3rd Qu.:0.00000  
##  Max.   :213          Max.   :2132    Max.   :1.00000

Löschen der nicht mehr genutzten Variablen/Datensätze, um Speicherkapazität hoch zu halten.

rm(OEM_Alle)
rm(T14_plus_K2LE1)
rm(T14_K2LE1_Fahrzeug_Alle)

Wo wurden die Fahrzeuge zugelassen?

Datensatz_Zulassungen <- T14_K2LE1_Fahrzeug %>% 
  left_join(
    select(Zulassungen_alle_Fahrzeug,
           ID_Fahrzeug = IDNummer,
           Zulassung_Datum = Zulassung,
           Zulassung_Gemeinde = Gemeinden
    ),
    by = "ID_Fahrzeug"
  )

Gibt es NA-Einträge?

any(is.na(Datensatz_Zulassungen)) 
## [1] FALSE

Inhalt/Aufbau anschauen.

summary(Datensatz_Zulassungen)
##  ID_Fahrzeug        Herstellernummer_Fahrzeug Werksnummer_Fahrzeug
##  Length:190820      Min.   :1                 Min.   :11.0        
##  Class :character   1st Qu.:1                 1st Qu.:11.0        
##  Mode  :character   Median :1                 Median :12.0        
##                     Mean   :1                 Mean   :11.5        
##                     3rd Qu.:1                 3rd Qu.:12.0        
##                     Max.   :1                 Max.   :12.0        
##  Fehlerhaft_Fahrzeug   ID_Sitze            ID_T14         
##  Min.   :0.0000      Length:190820      Length:190820     
##  1st Qu.:0.0000      Class :character   Class :character  
##  Median :0.0000      Mode  :character   Mode  :character  
##  Mean   :0.1004                                           
##  3rd Qu.:0.0000                                           
##  Max.   :1.0000                                           
##  Herstellernummer_T14 Werksnummer_T14 Fehlerhaft_T14   
##  Min.   :213          Min.   :2131    Min.   :0.00000  
##  1st Qu.:213          1st Qu.:2131    1st Qu.:0.00000  
##  Median :213          Median :2132    Median :0.00000  
##  Mean   :213          Mean   :2132    Mean   :0.09997  
##  3rd Qu.:213          3rd Qu.:2132    3rd Qu.:0.00000  
##  Max.   :213          Max.   :2132    Max.   :1.00000  
##  Zulassung_Datum      Zulassung_Gemeinde
##  Min.   :2009-01-01   Length:190820     
##  1st Qu.:2011-02-21   Class :character  
##  Median :2013-02-20   Mode  :character  
##  Mean   :2013-01-30                     
##  3rd Qu.:2015-02-20                     
##  Max.   :2016-12-27

Löschen der nicht mehr genutzten Variablen/Datensätze, um Speicherkapazität hoch zu halten.

rm(T14_K2LE1_Fahrzeug)
rm(Zulassungen_alle_Fahrzeug)

Geodaten für die Zulassungs-Gemeinden hinzufügen.

Datensatz_Ausfuehrlich <- Datensatz_Zulassungen %>% 
  left_join(
    select(Geodaten_Gemeinden,
           Zulassung_Gemeinde = Gemeinde,
           Postleitzahl,
           Laengengrad,
           Breitengrad),
    by = "Zulassung_Gemeinde"
  ) 

Gibt es NA-Einträge?

any(is.na(Datensatz_Ausfuehrlich)) # ja
## [1] TRUE

Zusammenfassung des Datensatzes:

summary(Datensatz_Ausfuehrlich)
##  ID_Fahrzeug        Herstellernummer_Fahrzeug Werksnummer_Fahrzeug
##  Length:190820      Min.   :1                 Min.   :11.0        
##  Class :character   1st Qu.:1                 1st Qu.:11.0        
##  Mode  :character   Median :1                 Median :12.0        
##                     Mean   :1                 Mean   :11.5        
##                     3rd Qu.:1                 3rd Qu.:12.0        
##                     Max.   :1                 Max.   :12.0        
##                                                                   
##  Fehlerhaft_Fahrzeug   ID_Sitze            ID_T14         
##  Min.   :0.0000      Length:190820      Length:190820     
##  1st Qu.:0.0000      Class :character   Class :character  
##  Median :0.0000      Mode  :character   Mode  :character  
##  Mean   :0.1004                                           
##  3rd Qu.:0.0000                                           
##  Max.   :1.0000                                           
##                                                           
##  Herstellernummer_T14 Werksnummer_T14 Fehlerhaft_T14   
##  Min.   :213          Min.   :2131    Min.   :0.00000  
##  1st Qu.:213          1st Qu.:2131    1st Qu.:0.00000  
##  Median :213          Median :2132    Median :0.00000  
##  Mean   :213          Mean   :2132    Mean   :0.09997  
##  3rd Qu.:213          3rd Qu.:2132    3rd Qu.:0.00000  
##  Max.   :213          Max.   :2132    Max.   :1.00000  
##                                                        
##  Zulassung_Datum      Zulassung_Gemeinde  Postleitzahl    Laengengrad    
##  Min.   :2009-01-01   Length:190820      Min.   : 1067   Min.   : 5.902  
##  1st Qu.:2011-02-21   Class :character   1st Qu.:26506   1st Qu.: 8.042  
##  Median :2013-02-20   Mode  :character   Median :50667   Median : 9.895  
##  Mean   :2013-01-30                      Mean   :50834   Mean   : 9.991  
##  3rd Qu.:2015-02-20                      3rd Qu.:78554   3rd Qu.:11.857  
##  Max.   :2016-12-27                      Max.   :99998   Max.   :14.988  
##                                          NA's   :15      NA's   :15      
##   Breitengrad   
##  Min.   :47.45  
##  1st Qu.:49.30  
##  Median :50.85  
##  Mean   :50.63  
##  3rd Qu.:51.64  
##  Max.   :54.87  
##  NA's   :15

NA’s entfernen

Datensatz_Ausfuehrlich_sauber <- na.omit(Datensatz_Ausfuehrlich)

Gibt es NA-Einträge?

any(is.na(Datensatz_Ausfuehrlich_sauber)) 
## [1] FALSE

Zusammenfassung des Datensatzes:

summary(Datensatz_Ausfuehrlich_sauber)
##  ID_Fahrzeug        Herstellernummer_Fahrzeug Werksnummer_Fahrzeug
##  Length:190805      Min.   :1                 Min.   :11.0        
##  Class :character   1st Qu.:1                 1st Qu.:11.0        
##  Mode  :character   Median :1                 Median :12.0        
##                     Mean   :1                 Mean   :11.5        
##                     3rd Qu.:1                 3rd Qu.:12.0        
##                     Max.   :1                 Max.   :12.0        
##  Fehlerhaft_Fahrzeug   ID_Sitze            ID_T14         
##  Min.   :0.0000      Length:190805      Length:190805     
##  1st Qu.:0.0000      Class :character   Class :character  
##  Median :0.0000      Mode  :character   Mode  :character  
##  Mean   :0.1004                                           
##  3rd Qu.:0.0000                                           
##  Max.   :1.0000                                           
##  Herstellernummer_T14 Werksnummer_T14 Fehlerhaft_T14   
##  Min.   :213          Min.   :2131    Min.   :0.00000  
##  1st Qu.:213          1st Qu.:2131    1st Qu.:0.00000  
##  Median :213          Median :2132    Median :0.00000  
##  Mean   :213          Mean   :2132    Mean   :0.09998  
##  3rd Qu.:213          3rd Qu.:2132    3rd Qu.:0.00000  
##  Max.   :213          Max.   :2132    Max.   :1.00000  
##  Zulassung_Datum      Zulassung_Gemeinde  Postleitzahl    Laengengrad    
##  Min.   :2009-01-01   Length:190805      Min.   : 1067   Min.   : 5.902  
##  1st Qu.:2011-02-21   Class :character   1st Qu.:26506   1st Qu.: 8.042  
##  Median :2013-02-20   Mode  :character   Median :50667   Median : 9.895  
##  Mean   :2013-01-30                      Mean   :50834   Mean   : 9.991  
##  3rd Qu.:2015-02-20                      3rd Qu.:78554   3rd Qu.:11.857  
##  Max.   :2016-12-27                      Max.   :99998   Max.   :14.988  
##   Breitengrad   
##  Min.   :47.45  
##  1st Qu.:49.30  
##  Median :50.85  
##  Mean   :50.63  
##  3rd Qu.:51.64  
##  Max.   :54.87

Löschen der nicht mehr genutzten Variablen/Datensätze, um Speicherkapazität hoch zu halten.

rm(Geodaten_Gemeinden)
rm(Datensatz_Zulassungen)
rm(Datensatz_Ausfuehrlich)

2.5 Datensatz erstellen

Datensatz_Analyse <- Datensatz_Ausfuehrlich_sauber %>% 
  select(
    ID_T14,
    ID_Sitze,
    ID_Fahrzeug,
    Zulassung_Datum,
    Zulassung_Gemeinde,
    Werksnummer_Fahrzeug,
    Postleitzahl,
    Laengengrad,
    Breitengrad
  )

Zusammenfassung des Datensatzes:

summary(Datensatz_Analyse)
##     ID_T14            ID_Sitze         ID_Fahrzeug       
##  Length:190805      Length:190805      Length:190805     
##  Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character  
##                                                          
##                                                          
##                                                          
##  Zulassung_Datum      Zulassung_Gemeinde Werksnummer_Fahrzeug
##  Min.   :2009-01-01   Length:190805      Min.   :11.0        
##  1st Qu.:2011-02-21   Class :character   1st Qu.:11.0        
##  Median :2013-02-20   Mode  :character   Median :12.0        
##  Mean   :2013-01-30                      Mean   :11.5        
##  3rd Qu.:2015-02-20                      3rd Qu.:12.0        
##  Max.   :2016-12-27                      Max.   :12.0        
##   Postleitzahl    Laengengrad      Breitengrad   
##  Min.   : 1067   Min.   : 5.902   Min.   :47.45  
##  1st Qu.:26506   1st Qu.: 8.042   1st Qu.:49.30  
##  Median :50667   Median : 9.895   Median :50.85  
##  Mean   :50834   Mean   : 9.991   Mean   :50.63  
##  3rd Qu.:78554   3rd Qu.:11.857   3rd Qu.:51.64  
##  Max.   :99998   Max.   :14.988   Max.   :54.87

Datensatz speichern im RData-Format.

save(Datensatz_Analyse, file = "Finaler_Datensatz_06.RData")

Löschen der nicht mehr genutzten Variablen/Datensätze, um Speicherkapazität hoch zu halten.

rm(Datensatz_Ausfuehrlich_sauber)

3 Shiny App

Innerhalb der Shiny-App soll eine Übersicht entstehen über die betroffenen Fahrzeuge. Wie es in der Einleitung erwähnt wird, werden die folgen Teilen dargestellt:

  • Bedienfeld
    • Kann sowohl Fahrzeugtyp (11 oder 12) als auch Zeitraum (im Monat) auswählen. Das dient zur Kontrolle von Heatmap und Balkendiagramm. Mit update Button kann Fahrzeugtyp nach Auswahl aktualisiert wird.
  • Balkendiagramm
    • Zeigt die monatliche Registrierung von Fahrzeugen mit unseren Ledersitzbezügen. Das Zeitraum kann durch Bedienfeld beliebig gewählt werden.
  • Tabelle
  • Es gibt hier 2 Tabellen und die werden in 2 Fenster dargestellt. Erste Tabelle Data Graph, die nur mit notwendiger Information dargestellt wird, dient zur Unterstützung von Visualisierung der Balkendiagramm sowie Heatmap.
  • Zweite Tabelle enthält alle Daten, die vorher bereinigt werden.
  • Heatmap (inklusive die Anzahl der registrierten Fahrzeuge)
    • zeigt alle betroffenen Fahrzeuge in den Zulassungsgemeinden. Die Daten werden entsprechend des Fahrzeugtyps unterteilt.

Details sehen Screenshot unten:

Notwendigen Pakete laden.

if(!require(tidyverse)) {
  install.packages("tidyverse")
  require(tidyverse)
}

if(!require(lubridate)) {
  install.packages("lubridate")
  require(lubridate)
}

if(!require(shiny)) {
  install.packages("shiny")
  require(shiny)
}

if(!require(shinyjs)) {
  install.packages("shinyjs")
  require(shinyjs)
}

if(!require(plotly)) {
  install.packages("plotly")
  require(plotly)
}

if(!require(leaflet)) {
  install.packages("leaflet")
  require(leaflet)
}

if(!require(leaflet.extras)) {
  install.packages("leaflet.extras")
  require(leaflet.extras)
}

if(!require(ggsci)) {
  install.packages("ggsci")
  require(ggsci)
}

Einlesen des zurvor erstellten Datensatzes aus dem Analyseprozess.

Datensatz <- get(load("Finaler_Datensatz_06.RData"))

Begrenzung für Slider

erstes <- min(Datensatz$Zulassung_Datum)
letztes <- max(Datensatz$Zulassung_Datum)

Funktion zur Definition von Farben für den entsprechenden Autotyp. Diese werden in der Leaflet-Karte als Markerfarben genutzt.

getColor <- 'blue'

Auswahl eines Icons als Marker auf der Karte

icons <- awesomeIcons(
  icon = 'ion-android-car',
  iconColor = 'white',
  library = 'ion',
  markerColor = getColor
)

Als nächstes wird der ausführliche Code der APP angezeigt. Nachdem der Code angezeigt wird, werden unseres Ergebnis diskutiert. Das APP besteht aus 2 große Teile: * ui.R: enthält alles, das zur Benutzeroberfläche zählt * server.R: bestimmt, welche Daten für die verschiedenen Teile der App verwendet werden.

Benutzoberfläche

User Interface: Benutzeroberfläche, Input. Die Funktion fluidRow ermöglicht eine benutzerdefinierte Struktur.

ui <- fluidPage(
  useShinyjs(),
  
  fluidRow(

Die App-Oberfläche wird in 12 Spalten eingeteilt. Im Header steht auf der linken Seite die Überschrift für die App, gegenüber auf der rechten Seite die Informationen zum Hintergrund dieser Abgabe. Der erste Absatz wird also in zwei Bereiche eingeteilt, der je 6 Spaltenbreiten einnimmt. Über Funktion align werden die Überschriften an den rechten Rand angordnet.

    column(6,
           # Titel
           titlePanel(
             br(),
             title = "CASE STUDY 06" 
           ),
           h4("Identify popularity of leather cover T14 in Germany"),
           h5("Seat cover mancufacturer 213")
    ),
    column(6,
           h6("TU Berlin", align = "right"),
           h6("Institut für Werkzeugmaschinen und Fabrikbetrieb", align = "right"),
           h6("Introduction to Engineering Data Analytics with R", align = "right"),
           h6("SS19, 22.08.2019", align = "right")
    )
  ),
  #eine leere Zeile einfügen, um die Übersichtlichkeit zu verbessern.
  br(),

Der nächste Absatz wird eingeteilt mit 4 Spaltenbreiten für die einstellbaren Variablen auf der linken Seite und der dazugehörige Diagramm auf der rechten Seite. Über wellpanel() wird eine Tabelle erstellt in der alle auswählbaren Größen aufgelistet werden. Der Slider ermöglicht die Einstellung des Zeitraums der Zulassungen in der ausgewählten Gemeinde. Über den Action-Button “update” muss die neue Auswahl bestätigt werden, damit sich die Ausgaben anpassen.

  fluidRow(
    # Überschrift für Graph
    h3(" Monthly registration of vehicles ", align = "center"),
    
    column(4,
           
           br(),
           br(),
           br(),
           
           #Seitenleiste Datenauswahl
           wellPanel(
             
             #Gemeinde/n auswählbar, in der/denen Fahrzeuge zugelassen wurden
             selectizeInput(
               inputId = "vehicle",
               label = "Vehicle type",
               choices = sort(unique(Datensatz$Werksnummer_Fahrzeug))
             ),
             
             #Zeitraum auswählen des Zulassungsverlaufs in gewählter/n Gemeinde/n
             sliderInput(
               inputId = "zeitraum",
               label = "Date in month",
               min = as.Date(erstes),
               max = as.Date(letztes),
               value = c(as.Date(erstes), as.Date(letztes)),
               timeFormat = "%m %Y"
             ),
             
             #Update Button zum Aktualisieren des Main Panel nach Ändern der Datenauswahl
             actionButton(
               inputId = "update",
               label = "update"
             )
           )
    ),

In der rechten Fensterhälfte des zweiten Absatzes mit einer Breite von 8 Spalten. Die Ausgabe enthält die Diagramm, die die monatliche Registrierung von Fahrzeugen zeigt.

    #Hauptfenster Output
    column(8,
           
           #Graph zeitlicher Zulassungsverlauf für gewählte Gemeinde
           plotlyOutput(
             outputId = "graph"
           )
    ),
    
    br(),

Im nächsten Absatz wird über die gesamte Fenstergröße der Datensatz dargestellt auf den die Diagramm und die Heatmap basieren. Hierbei ist auszuwählen zwischen zwei Fenstern/Tabs.

    column(12,  
           tabsetPanel(
             
             #zugehörige Tabelle mit Daten zum Graph
             tabPanel("Data Graph",
                      dataTableOutput(
                        outputId = "tabelle"
                      )
             ),
             
             # gesamter Datensatz
             tabPanel("Data Total",
                      dataTableOutput(
                        outputId = "daten_gesamt"
                      )
             )
           )
    ),
    
    br(),
    br(),

Als letztes wird die Heatmap gezeigt, die am Ende der App bildet.

    # Karte
    column(12,
           # Überschrift für Karte
           br(),
           h3("Regional distribution of vehicle registrations", align = "center"),
           br(),  
           
           # Kartengröße an Fenstergröße anpassen.
           tags$style(type = "text/css", "#karte {height: calc(100vh - 120px) !important;}"),
           
           title = "Map",
           
           leafletOutput(
             outputId = "karte"),
           
           br(),
           hr()
    )
  )
)

Darstellungsinhalt und Anweisung

Der server-Teil der App bestimmt, welche Daten für die verschiedenen Teile der App verwendet werden. Reaktive Zugriffe auf die variablen Datenmengen werden durch Veränderung der Input-Einstellungen realisiert. Beschreibungen sind schon vorher gezeigt und genaue Befehle werden dann mit # angemerkt.

Output mit Input von ui

server <- function(input, output, session) {
  
  # Datenaufruf nach Aktualisierung
  daten_nach_input <- reactive({
    
    # Aktualisierungs-Button
    input$update
    
    isolate({
      
      # Filtern der Daten nach eingegebener Fahrzeugtype.
      daten <- filter(Datensatz,
                      Werksnummer_Fahrzeug == input$vehicle)
    })
  })

  
  
  # Datensatz für Heatmap variabel durch Drop-Down Fenster.
  daten_filter <- reactive({
    
    # Update, wenn Aktualisieren-Button gedrückt wird.
    input$update
    isolate({
      
      # Auswahl des Fahrzeugtyps durch Drop-Down Fenster.
      daten <- filter(Datensatz,
                      Werksnummer_Fahrzeug == input$vehicle)
    })
  })

  
  
  # Statischer Teil der Karte, wird nur einmal geladen.
  output$karte <- renderLeaflet({
    
    leaflet(Datensatz) %>%
      addProviderTiles("Stamen.TonerLite", 
                       group = "Simpel (Standard)", 
                       options = providerTileOptions(minZoom = 4, maxZoom = 13)) %>%
      addTiles(group = "Open Street Map") %>%
      
      # Konzentration des Zooms auf die Koordinaten im Datensatz.
      fitBounds(
        ~min(Laengengrad)-1, 
        ~min(Breitengrad)-1, 
        ~max(Laengengrad)+1, 
        ~max(Breitengrad)+1) 
  })

  
  
  #Output1 Graph:  # zeitlicher Zulassungsverlauf der Fahrzeuge 
  output$graph <- renderPlotly({
    
    # Berechnung der Zulassungen pro Monat.
    Datensatz %>% mutate(Zulassung_Datum = ymd(Zulassung_Datum),
                       Year = Zulassung_Datum%>%year(),
                       Month = Zulassung_Datum %>% month()) %>%
      filter(Zulassung_Datum >= input$zeitraum[1]&Zulassung_Datum<=input$zeitraum[2]) %>%
      group_by(Year,Month,Werksnummer_Fahrzeug) %>%summarise(sum_number=n()) %>%
      
      # # Output Graph Zulassungen pro Monat.
      ggplot(aes(x =factor(Month),y=sum_number,
                 fill=factor(Werksnummer_Fahrzeug))) + 
      geom_bar(stat = "identity") +facet_grid(Year~.)+
      
      # Achsenbeschriftung.
      labs(x="Month", 
           y="Number of vehicle registrations per month",
           fill="Vehicle type") +
      theme(axis.text = element_text(size=6),
            axis.title = element_text(size=8))+
      scale_fill_d3()
    
  })

  
  
  #Output2 Tabelle: Daten zum Graph
  output$tabelle <- renderDataTable(
    
    # Aktualisierte Daten.
    select(
      daten_nach_input(), 
      1:6),
    
    # Veränderung des default wie viele Einträge der Tabelle angezeigt werden.
    options = list(
      pageLength = 5, 
      lengthMenu = c(5, 10, 15, -1)
    )
  )

  
  
  #Output3 Tabelle: Datensatz gesamt.
  output$daten_gesamt <- renderDataTable(
    
    Datensatz[order(Datensatz$Zulassung_Gemeinde),],
    
    options = list(
      pageLength = 5, 
      lengthMenu = c(5, 10, 15, -1)
    )
  )

  
  
  # Output4 Heatmap: zum gesamten Datensatz
  observe({
    
    leafletProxy("karte", data = daten_filter()) %>%
      
      # Löschen von vorherigen Ausgaben, wenn Daten verändert wurden.
      clearShapes() %>%
      clearPopups() %>%
      clearMarkers() %>%
      clearMarkerClusters %>%
      clearHeatmap %>%
      
      # Heatmap wird in ein extra Layer auf statische Karte gelegt mit im Datensatz vorhandenen Koordinaten.
      addHeatmap(lng = ~Laengengrad, 
                 lat = ~Breitengrad, 
                 max = .6,
                 group = "Heatmap",
                 blur = 60) %>%
      
      # Markereinstellungen.
      addAwesomeMarkers(
        lng = ~Laengengrad, 
        lat = ~Breitengrad,
        icon = icons,
        
        # Popup zeigt Zulassungsort, Postleitzahl und Fahrzeug_ID.
        popup = ~paste(
          "<b>Zulassungsort: </b>", Zulassung_Gemeinde, "<br>",
          "<b>Postleitzahl: </b>", Postleitzahl, "<br>",
          "<b>Fahrzeug: </b>", ID_Fahrzeug, "<br>"),
        
        # Für eine bessere Übersicht, werden die Marker in Cluster zusammengefasst.
        clusterOptions = markerClusterOptions(),
        group = "Detailliert"
      ) %>%
      
      addLayersControl(
        baseGroups = c("Simpel (Standard)", "Open Street Map"),
        overlayGroups = c("Detailliert", "Heatmap"),
        position = "bottomleft",
        options = layersControlOptions(collapsed = TRUE)
      ) %>%
      
      # Heatmap wird beim Start nicht angezeigt.
      hideGroup(group = "Heatmap")
    
  })
  
}

Am Ende wird das App über shinyApp() und die Übergabe beider Variablen aufgerufen.

#App aufrufen
shinyApp(ui = ui, server = server)

4 Ergebnisse Diskussion

4.1 Balkendiagramm

Aus die Balkendiagramm ist es deutlich zu sehen, wie die Ledersitzbezüge T14 monatlich verkauft bzw. registriert werden. Die Analyse wird in 2 Richtungen durchgeführt: In der Richtung Zeit, In der Richtung Fahzeugtyp. 1. In der Richtung Zeit: Es gibt keine bestimmte Regel, aber am Anfang eines Jahrs, inder Mittel eines Jahrs und am Ende eines Jahrs erscheinen wenigere Verkäufe von Sitzbezügen im vergleich zu anderen Monaten. 2. In der Richtung Fahrzeugtyp: Die Sitzbezüge auf Fahrzeugtyp 12 werden normaleweise mehr als die auf Fahrzeugtyp 11 verkauft.

4.2 Map

Schließlich ist es auch der wichtigste Teil. Als nächstes wird die Verteilung von Sitzbezüge T14 in Deutschland analysiert und durch die Analyse ist es klar zu verstehen, wo sich T14 am besten verkauft. Die Analyse wird in 3 Teilen durchgeführt bzw. auf Fahrzeugtyp 11, auf Fahrzeugtyp 12 und Vergleichen der Sitzbezüge auf verschiedenen Fahzeugtypen in gleicher Gemeinde.

Wichtig: Die Vergleichen von Gemeinden werden nur mit gleichem Abstand in Map durchgeführt!

4.2.1 Sitzbezüge auf Fahzeugtyp 11

Auf den ersten Abstand ist es zu erfahren, dass die Sitzbezüge auf Fahrzeugtyp 11 in Westdeutschland mehr beliebig sind. Aber die Zahlen in der Nähe von Leizig, Stuttgart und Munich auch hoch sind. Deshalb sind diese 3 Gemeinde auch notwendig zu prüfen.

Auf den zweiten Abstand werden in oberem Bild rot markierte Gemeinde eingefallen.

Am Ende ist es mit Hilfe von Heatmap deutlich zu sehen, dass die Sitzbezüge auf Fahrzeugtyp 11 in diesen zwei Städten Köln und Essen am beliebtesten sind.

4.2.2 Sitzbezüge auf Fahzeugtyp 12

Auf den ersten Abstand wird es zu eingefallen, dass die Sitzbezüge sowohl in Westdeutschland als auch in Süddeutschland beliebig sind.

Auf den zweiten Abstand ist es eingefallen, dass die Sitzbezüge in den Städten Dortmund, Köln und Munich mehr beliebig sind. Und diese Städte werden in nächstem Schritt geprüft.

Mit Hilfe von Heatmap ist es auf dritten Abstand deutlich zu erfahren, dass die Sitzbezüge T14 auf das Fahrzeugtyp 12 in Köln am beliebtesten sind.

4.3 Zusammenfassung

Die Ledersitzbezüge T14, die sowohl für Fahrzeugtyp 11 als auch für Fahrzeugtyp 12 benutzt werden, sind in Stadt Köln am beliebtesten.